// cf-374d
// 题意：给定m(<=10^6)个数，a1, a2, ..., am,(1<=a1<a2<a3<...)，初始有个空串，
//       然后有n(<=10^6)个操作，向串尾增加1或者0, 或者同步的将ai位置的数删掉，
//       如果某个ai大于当前串长度就不删除。现在问最后得到的串是什么。
//
// 题解：一开始每想法。后来忽然注意到如果n和m都很大，玩个蛋，如果m和n是一个
//       数量级的，那么没删几次就删完了。所以就想到了分m大于sqrt(10^6)和
//       小于sqrt(10^6)两种情况来做，大的时候就直接暴力。小的话我们可以
//       用一个数组标记当前位置是否被删，然后用树状数组维护前缀和看看
//       当前位置有几个，然后对于每个合理的删除位置我们二分到它的下标，
//       打上标记就行。
//
// run: $exec < input
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>

std::vector<int> a;
std::vector<int> ans;
int n, m;

int const maxn = 1000007;
int const sm = std::sqrt(maxn);
int da[maxn];
bool vis[maxn];
int tree[maxn];

int lowbit(int x) { return x & -x; }

void bit_update(int id, int d)
{
	for (; id <= n; id += lowbit(id)) tree[id] += d;
}

int bit_sum(int id)
{
	int ret = 0;
	for (; id > 0; id -= lowbit(id)) ret += tree[id];
	return ret;
}

int main()
{
	std::ios::sync_with_stdio(false);
	std::cin >> n >> m;
//	std::scanf("%d%d", &n, &m);
	a.resize(m);
	for (int i = 0; i < m; i++) std::cin >> a[i];
		//std::scanf("%d", &a[i]);
	if (false) {
//	if (false) {
		for (int i = 0, x; i < n; i++) {
			//std::scanf("%d", &x);
			std::cin >> x;
			if (x != -1) ans.push_back(x);
			else {
				int l = std::upper_bound(a.begin(), a.end(), ans.size()) - a.begin();
				for (int j = 0, t = 0; j < l; j++)
					ans.erase(ans.begin() + a[j] - 1 - t++);
			}
			/*
			std::cout << "i = " << i << ": ";
			for (auto i : ans) std::cout << i;
			std::cout << '\n';
			*/
		}
		if (ans.empty()) std::cout << "Poor stack!\n";
		//	std::printf("Poor stack!\n");
		else {
			for (auto i : ans) std::cout << i;
				//std::printf("%d", i);
			//std::printf("\n");
			std::cout << '\n';
		}
	} else {
		int tot = 0, removed = 0;
		for (int i = 0, x; i < n; i++) {
			std::cin >> x;
			if (x != -1) { da[++tot] = x; bit_update(tot, 1); }
			else {
				int len = std::upper_bound(a.begin(), a.end(), tot - removed) - a.begin();
				for (int j = 0, tr = 0; j < len; j++) {
					int t = a[j] - tr++;

					int l = 1, r = tot;
					while (l + 1 < r) {
						int mid = (l + r) / 2;
						if (bit_sum(mid) >= t) r = mid;
						else l = mid;
					}
					if (bit_sum(l) == t) r = l;

					vis[r] = true;
					bit_update(r, -1);
					removed++;
				}
			}

			/*
			std::cout << "i = " << i << ": ";
			for (int i = 1; i <= tot; i++)
				if (!vis[i]) std::cout << da[i];
			std::cout << '\n';
			*/
		}
		if (!(tot - removed))
			std::cout << "Poor stack!\n";
		else {
			for (int i = 1; i <= tot; i++)
				if (!vis[i]) std::cout << da[i];
			std::cout << '\n';
		}
	}
}

